home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 1 / LSD Compendium Deluxe 1.iso / a / programming / assemblers / trashm20.lha / EXTERNASM / EXTERNASSEMBLER.I
Encoding:
Text File  |  1993-11-13  |  5.5 KB  |  302 lines

  1. »·······T·······T·······T·······T·······T·······T·······T·······T·······T·····T
  2.  
  3. ;NOTE: A4 IS USED INTERNALLY IN TRASH'M-ONE AND MAY ONLY BE USED IF IT IS 
  4. ;      RESTORED..
  5.  
  6. ******* MACROS FOR EXTERN ASSEMBLER *******
  7.  
  8. ;D7 FLAG
  9.  
  10. AF_OPTIMIZE=    0
  11. AF_BRATOLONG=    1
  12. AF_UNDEFVALUE=    2
  13. AF_BSS_AREA=    3
  14. AF_BYTE_STRING=    4
  15. AF_MACRO_END=    6
  16. AF_FINISHED=    7
  17. AF_LOCALFOUND=    8
  18. AF_LABELCOL=    9
  19. AF_MACROS_OFF=    10
  20. AF_GETLOCAL=     11
  21. AF_EXTERN_ASM=    12
  22. AF_PASSONE=    15
  23. AF_SEMICOMMENT=    25
  24. AF_OFFSET=    26
  25. AF_OFFSET_A4=    27
  26. AF_ALLERRORS=    28
  27. AF_LISTFILE=    29
  28. AF_DEBUG1=    30
  29. AF_IF_FALSE=    31
  30.  
  31.  
  32. GET:            MACRO            GET NEXT WORD TO CHECK
  33.             MOVE.W    (A3)+,D0
  34.             AND.W    D4,D0
  35.             ENDM
  36. CXD:            MACRO            CHECK WORD AND JUMP SHORT
  37.             CMP.W    #\1,D0
  38.             BEQ.\0    \2
  39.             ENDM
  40. ECXD:            MACRO            CHECK END WORD AND JUMP SHORT
  41.             CMP.W    #\1+$8000,D0
  42.             BEQ.\0    \2
  43.             ENDM
  44. CXDS:            MACRO            CHECK BYTE AND JUMP SHORT
  45.             CMP.W    #\1<<8,D0
  46.             BEQ.\0    \2
  47.             ENDM
  48. ECXDS:            MACRO            CHECK END BYTE AND JUMP SHORT
  49.             CMP.W    #\1<<8+$8000,D0
  50.             BEQ.\0    \2
  51.             ENDM
  52. NOCXD:            MACRO            IF NO COMMAND IS FOUND.
  53.             MOVE.L    (SP)+,(SP)
  54.             RTS
  55.             ENDM
  56. ERROR            MACRO            OUTPUT ERROR
  57.             LEA    .\@,A0
  58.             BRA.W    REP_ERROR
  59. .\@            DC.B    \1,0
  60.             EVEN
  61.             ENDM
  62. NEXTKOMMA        MACRO            GOTO NEXT "," , 
  63.             BSR    PARSE_GET_KOMMA    IF NO KOMMA IS THERE
  64. ;                        IT WILL DISPLAY
  65. ;                        "ILLEGAL OPERAND"
  66.             ENDM
  67. CXDRTS            MACRO            USED INSTEAD OF RTS
  68.             ADDQ.W    #4,SP
  69.             RTS
  70.             ENDM
  71. SENDBYTE        MACRO            $XX
  72.             BSR.\0    SND1B
  73.             ENDM
  74. SENDBYTESIGNED        MACRO            $xx      XREF
  75.             BSR.\0    SND1BS
  76.             ENDM
  77. SENDBYTEUNSIGNED    MACRO            $xx      XREF
  78.             BSR.\0    SND1BUN
  79.             ENDM
  80. SEND2BYTEUNSIGNED    MACRO            $00xx      XREF
  81.             BSR.\0    SND2BUN
  82.             ENDM
  83. SENDWORD        MACRO            $xxxx
  84.             BSR.\0    SND1W
  85.             ENDM
  86. SENDWORDSIGNED        MACRO            $xxxx      XREF
  87.             BSR.\0    SND1WS
  88.             ENDM
  89. SENDWORDUNSIGNED    MACRO            $xxxx      XREF
  90.             BSR.\0    SND1WUN
  91.             ENDM
  92. SENDLONG        MACRO            $xxxxxxxx
  93.             BSR.\0    SND1L
  94.             ENDM
  95. SENDLONGRELOC        MACRO            $xxxxxxxx RELOC
  96.             BSR.\0    SND1LR
  97.             ENDM
  98. SENDBEGIN        MACRO
  99.             BSR.W    ASKIP
  100.             ENDM
  101. SENDEND            MACRO
  102.             BSR.W    AINSERT
  103.             ENDM
  104. NEXTSYMBOL        MACRO
  105.             BSR.W    NSYMBOL
  106.             ENDM
  107. NS_AVALUE=$61        ;RETURN VALUE FOR NEXTSYMBOL(D1) IF GOT A VALUE
  108. NS_ALABEL=$62        ;RETURN VALUE FOR NEXTSYMBOL(D1) IF GOT A LABEL
  109.             ;USE NEXT LABEL TO GET THE VALUE(D3)
  110. NEXTSYMBOLBUFFER    MACRO
  111.             SUBQ.W    #4,SP
  112.             BSR.W    NSYMBOLBUFFER
  113.             MOVE.L    (SP)+,\1
  114.             ENDM
  115. INCDIRBUFFER        MACRO
  116.             SUBQ.W    #4,SP
  117.             BSR.W    INCDIRBUF
  118.             MOVE.L    (SP)+,\1
  119.             ENDM
  120. INPUTBUFFER        MACRO
  121.             SUBQ.W    #4,SP
  122.             BSR.W    INPUTBUF
  123.             MOVE.L    (SP)+,\1
  124.             ENDM
  125. RESERVECODE        MACRO
  126.             MOVE.L    \1,D0
  127.             JSR    RESERVE
  128.             MOVE.L    D0,\2
  129.             ENDM
  130. NEXTLABEL        MACRO
  131.             BSR.W    NLABEL
  132.             ENDM
  133. GETVALUE        MACRO            GET STRINGS VALUE
  134.             BSR.W    GET_VALUE
  135.             ENDM
  136. GETADDR            MACRO
  137.             BSR.W    GET_ADDR
  138.             ENDM
  139. GETLABEL        MACRO
  140.             BSR    GETLABELVAL
  141.             ENDM
  142.  
  143. ;    MOVE.L    INSTRUCTION_DATA_FIELD_PTR(A4),D0
  144. ;    MOVE.L    CURRENT_ABS_ADDRESS,D1            ONLY IN PASS2
  145. ;    MOVE.W    CURRENT_SECTION(A4),D2
  146.  
  147. ASMHEAD    MACRO
  148.     MOVEQ    #0,D0
  149.     RTS
  150.  
  151. STARTOFASSEMBLER
  152.     ILLEGAL
  153.     DC.L    STARTOFASSEMBLER
  154.     DC.L    \3
  155.     DC.L    $80000900
  156.     DC.L    .ASMNAME
  157.     DC.L    .ASMVERSION
  158.     DC.L    .ASMNODELIST
  159. .ASMNAME
  160.     DC.B    '\4.assembler',0    ;Assembler name must be the same as
  161.                     ;saved and in lower case
  162.     DC.B    '$VER: '
  163. .ASMVERSION
  164.     DC.B    \5,0
  165.     EVEN
  166.  
  167. .ASMNODELIST
  168.     DC.L    $2A
  169.     DC.L    .ASMNODELIST1
  170.     DC.L    0
  171.     DC.L    .0
  172.  
  173. .0    EXG    D0,A5
  174.     MOVE.L    A6,$22(A5)
  175.     MOVE.L    A0,$26(A5)
  176.     MOVE.W    #$1D,$16(A5)
  177.     EXG    D0,A5
  178.     RTS
  179.  
  180. .ASMNODELIST1
  181.     DC.L    .INSTALLASSEMBLER    Don't change
  182.     DC.L    .REMOVEASSEMBLER    Don't change
  183.     DC.L    .EXIT            Don't change
  184.     DC.L    .EXIT            Don't change
  185.     DC.L    INITTRASH        Don't Change
  186.     DC.L    INITASSEMBLER        Don't Change
  187.     DC.L    INITASSEMBLER2        Don't Change
  188.     DC.L    .RESERVED
  189.     DC.L    .RESERVED
  190.     DC.L    .RESERVED
  191.     DC.L    .RESERVED
  192.     DC.L    .RESERVED
  193.     DC.L    .RESERVED
  194.     DC.L    .RESERVED
  195.     DC.L    .RESERVED
  196.     DC.L    .RESERVED
  197.     DC.L    .RESERVED
  198.     DC.L    .RESERVED
  199.     DC.L    -1
  200.  
  201. .RESERVED
  202.     rts
  203.  
  204. .EXIT    MOVEQ    #0,D0
  205.     RTS
  206.  
  207. .INSTALLASSEMBLER
  208.     ADDQ.W    #1,$20(A6)
  209.     MOVE.L    A6,D0
  210.     ;START UP PROCEDURE
  211.     RTS
  212.  
  213. .REMOVEASSEMBLER
  214.     SUBQ.W    #1,$20(A6)
  215.     BNE.S    .End
  216.     MOVEM.L    D2/A5/A6,-(SP)
  217.     MOVEA.L    A6,A5
  218.     MOVE.L    $26(A5),D2
  219.     MOVEA.L    A5,A1
  220.     MOVEA.L    (A1)+,A0
  221.     MOVEA.L    (A1),A1
  222.     MOVE.L    A0,(A1)
  223.     MOVE.L    A1,4(A0)
  224.     MOVEA.L    $22(A5),A6
  225.     MOVEA.L    A5,A1
  226.     MOVEQ    #0,D0
  227.     MOVE.W    $10(A5),D0
  228.     SUBA.L    D0,A1
  229.     ADD.W    $12(A5),D0
  230.     JSR    -$D2(A6)
  231.     MOVE.L    D2,D0
  232.     MOVEM.L    (SP)+,D2/A5/A6
  233. .End    RTS
  234.  
  235. ******* LIBRARY HEADER FOR EXTERN ASSEMBLER *******
  236.  
  237. INITTRASH    MOVE.L    #\1,D0
  238.         MOVE.L    #\2,D1
  239.         RTS
  240. INITASSEMBLER    MOVE.L    D0,REP_ERROR+2
  241.         MOVE.L    D1,GET_VALUE+2
  242.         MOVE.L    D2,PARSE_GET_KOMMA+2
  243.         MOVE.L    D3,SND2BUN+2
  244.         MOVE.L    D4,SND1BUN+2
  245.         MOVE.L    D5,SND1B+2
  246.         MOVE.L    D6,SND1BS+2
  247.         MOVE.L    D7,SND1WS+2
  248.         MOVE.L    A0,SND1WUN+2
  249.         MOVE.L    A1,SND1W+2
  250.         MOVE.L    A2,SND1L+2
  251.         MOVE.L    A3,SND1LR+2
  252.         MOVE.L    A4,ASKIP+2
  253.         MOVE.L    A5,AINSERT+2
  254.         RTS
  255. INITASSEMBLER2    MOVE.L    D0,NSYMBOL+2
  256.         MOVE.L    D1,NSYMBOLBUFFER+2
  257.         MOVE.L    D2,NLABEL+2
  258.         MOVE.L    D3,GET_ADDR+2
  259.         MOVE.L    D4,GETLABELVAL+2
  260.         MOVE.L    D5,INCDIRBUF+2
  261.         MOVE.L    D6,PRINTTEXT+2
  262.         MOVE.L    D7,DOSBASE
  263.         MOVE.L    A0,INPUTBUF+2
  264.         MOVE.L    A1,RESERVE+2
  265.         MOVE.L    A2,PRINTLENGTH+2
  266.         RTS
  267.  
  268.  
  269. ******* CODE FOR EXTERN ASSEMBLER ******
  270.  
  271. CHK68000    MOVE.L    (SP)+,(SP)
  272.         RTS
  273. REP_ERROR    JMP    $00000000.L
  274. GET_VALUE    JMP    $00000000.L
  275. PARSE_GET_KOMMA    JMP    $00000000.L
  276. SND2BUN        JMP    $00000000.L
  277. SND1BUN        JMP    $00000000.L
  278. SND1B        JMP    $00000000.L
  279. SND1BS        JMP    $00000000.L
  280. SND1WS        JMP    $00000000.L
  281. SND1WUN        JMP    $00000000.L
  282. SND1W        JMP    $00000000.L
  283. SND1L        JMP    $00000000.L
  284. SND1LR        JMP    $00000000.L
  285. ASKIP        JMP    $00000000.L
  286. AINSERT        JMP    $00000000.L
  287. NLABEL        JMP    $00000000.L
  288. NSYMBOL        JMP    $00000000.L
  289. GET_ADDR    JMP    $00000000.L
  290. GETLABELVAL    JMP    $00000000.L
  291. PRINTTEXT    JMP    $00000000.L
  292. NSYMBOLBUFFER    MOVE.L    #$0,4(SP)
  293.         RTS
  294. INCDIRBUF    MOVE.L    #$0,4(SP)
  295.         RTS
  296. INPUTBUF    MOVE.L    #$0,4(SP)
  297.         RTS
  298. RESERVE        JMP    $00000000.L
  299. PRINTLENGTH    JMP    $00000000.L
  300. DOSBASE        DS.L    1
  301.         ENDM
  302.